package com.zzc.study.utils;

import java.util.Arrays;
import java.util.Comparator;

/**
 * 所谓方法引用，是指如果某个方法签名(形参列表+返回值)和接口恰好一致，就可以直接传入方法引用。
 */
public class MethodRefDemoV2
{


    //v1 匿名内部类，new接口
    /*Arrays.sort(array, new Comparator<String>()
    {
        @Override
        public int compare(String o1, String o2)和接口恰好一致
        {
            return o1.compareTo(o2);
        }
    });*/
    //静态方法引用：类名称::静态方法名称
    //Arrays.sort(array,MethodRefDemoV2::cmp0923);

    static int cmp0923(String s1, String s2) //某个方法(cmp0923)签名(形参列表+返回值)
    {
        return s1.compareTo(s2);
    }

    public static void main(String[] args)
    {
        String[] array = new String[] { "Apple", "Orange", "Banana", "Lemon" };


        //所谓方法引用，是指如果某个方法签名(形参列表+返回值)和接口恰好一致，就可以直接传入方法引用。
        //静态方法引用：类名称::静态方法名称


        //v2 lambdaExpress
        //Arrays.sort(array, (o1, o2) -> o1.compareTo(o2));


        //v1 匿名内部类，new接口
        Arrays.sort(array, new Comparator<String>()
        {
            @Override
            public int compare(String o1, String o2)
            {
                return o1.compareTo(o2);
            }
        });











        //v2 lambdaExpress
        //Arrays.sort(array, (o1, o2) -> o1.compareTo(o2));


        //v3 方法引用,专门替代lambdaExpress
        //所谓方法引用，是指如果某个方法签名(形参列表+返回值)和接口恰好一致，就可以直接传入方法引用。
        //静态方法引用：类名称::静态方法名称
        Arrays.sort(array,MethodRefDemoV2::cmp0923);







        System.out.println(String.join(", ", array));
    }
}
